<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <button @click="obj.name='rose' ">点击修改名字</button>
      <button @click="obj.age='16' ">点击修改年龄</button>

      <div>{{obj}}</div>
    </div>
    <script src="./vue.js"></script>
    <script>
      new Vue({
        el: "#app",
        data: {
          obj: {
            name: "jack",
            age: 19,
          },
        },
        watch: {
          // // 我就是想侦听属性改变，怎么办？
          // "obj.name" (newVal, oldVal) {
          //     console.log('name改变了',newVal, oldVal)
          // },

          // 如果要侦听对象里的所有属性，像上面这个写法就麻烦了
          // 因为有10个属性，就要写10次
          // 能不能有一劳永逸的办法，只要写一次，不管对象内属性如何变化都能侦听
          // 有：深度侦听
          obj: {
            deep: true,
            // 当对象里任何属性发生改变，就会调用这个handler回调函数
            // 开启对象的深度侦听，这两个参数就没意义了
            // 因为对于对象而言，其实他的指向从来没变过，所以newVal和oldValue是同一个
            handler(newVal, oldVal) {
              console.log("obj里有属性变啦", newVal, oldVal, newVal === oldVal) // true
            },
          },
        },
      })
    </script>
  </body>
</html>
